﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.Collections;
using System.Data;
using DataLayer.dbml;
using DataLayer.Controller;


public partial class services_Flow : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {            
            SERVICIO serv = ServicesController.GetServiceById(Request.QueryString["idService"].ToString());

            if (serv != null)
            {
                this.setDataService(serv);
                this.paintFlow(serv);
            }            
        }
    }

    private void setDataService(SERVICIO serv)
    {                
        this.lblIdServicio.Text = serv.ID_SERVICIO;
        this.lblFechaPreventa.Text = serv.FECHA_INSTALACION_PREVENTA.ToString();
        this.lblFechaProgramada.Text = serv.FECHA_PROGRAMADA_INSTALACION.ToString();
        if (serv.FECHA_PROGRAMADA_INSTALACION.HasValue)
        {
            TimeSpan diff = serv.FECHA_PROGRAMADA_INSTALACION.Value.Subtract(DateTime.Today);
            this.lblDiasFaltantes.Text = diff.Days.ToString();
        }        
    }

    private void paintFlow(SERVICIO serv)
    {
        DataTable dtFlow = ServicesController.GetFlow(serv);

        if (dtFlow.Rows.Count == 0)
        {
            this.lblMensaje.Text = "No se encontró el flujo de estados para este servicio";
            return;
        }

        string[] arrEstadosInstalacion = new string[] { "EQUIPOS ENTREGADOS PARA CONFIGURAR", "EQUIPOS CONFIGURADOS" };

        //Se valida que el estado actual del servicio existe en el flujo de estados        
        bool existeEstado = false;
        for (int i = 0; i < dtFlow.Rows.Count; i++)
        {
            //El estado "PROGRAMADO PARA INSTALACION" reúne otros estados
            if ((dtFlow.Rows[i]["ESTADO"].ToString() == serv.ESTADO_SERVICIO) || (arrEstadosInstalacion.Contains(dtFlow.Rows[i]["ESTADO"].ToString())))
            {
                existeEstado = true;
                break;
            }
        }

        bool encontroEstado = false;
        if (existeEstado == true)
            {
                StringBuilder tablaFlujo = new StringBuilder();
                StringBuilder fila1 = new StringBuilder();
                StringBuilder fila2 = new StringBuilder();
                tablaFlujo.Append("<table align='center' cellpadding='0' cellspacing='0'>");
                fila1.Append("<tr style=\"background-position: center center; background-image: url('../images/line2.jpg'); background-repeat: no-repeat\">");
                fila2.Append("<tr>");


                //Recorre los pasos del flujo y va colocando imagen de completado hasta que llega al estado actual 
                //del servicio            
                for (int i = 0; i < dtFlow.Rows.Count; i++ )
                {
                    if (!encontroEstado)
                        fila1.Append("<td align='center'><span class='tooltip_text' href='#' onmousemove='showToolTip(event,\"" + dtFlow.Rows[i]["DESCRIPCION"].ToString() + "\");return false' onmouseout='hideToolTip()'><img src='../images/si.png' border='0' /></span></td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td>");
                    else
                        fila1.Append("<td align='center'><span class='tooltip_text' href='#' onmousemove='showToolTip(event,\"" + dtFlow.Rows[i]["DESCRIPCION"].ToString() + "\");return false' onmouseout='hideToolTip()'><img src='../images/no.png' border='0' /></span></td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td>");

                    fila2.Append("<td valign='top' align='center'>" + dtFlow.Rows[i]["ESTADO"].ToString() + "</td><td>&nbsp;</td>");

                    if (dtFlow.Rows[i]["ESTADO"].ToString().Equals(serv.ESTADO_SERVICIO))
                        encontroEstado = true;
                }


                fila1.Append("</tr>");
                fila2.Append("</tr>");

                tablaFlujo.Append(fila1);
                tablaFlujo.Append(fila2);
                tablaFlujo.Append("</table>");

                this.litFlujo.Text = tablaFlujo.ToString();
            }
            else
            {
                this.lblMensaje.Text = "Este estado no pertenece a ningún flujo de estados";
            }
    }



}
